<?php
declare (strict_types=1);

namespace app\listener;

use app\common\job\TradeSettle;
use app\common\model\Trade;
use think\facade\Queue;

class TradeEnded
{
    /**
     * 订单服务结束 事件监听处理
     *
     * @return mixed
     */
    public function handle(Trade $trade)
    {
        if (is_null($trade)) {
            // TODO 记录错误日志

            return;
        }

        // 服务结束

        $now = time();

        // 订单记录服务结束时间
        $trade->endTime = $now;
        $trade->save();

        //  24小时后执行分账任务(退款中的也需要尝试分账，因为有可能拒绝退款)
        if ($trade->refundStatus != Trade::REFUNDED && $trade->settleStatus == Trade::UNSETTLED) {
            $job_data = ['id' => $trade->id];
            Queue::later(86400, TradeSettle::class, $job_data);
        }
    }

}
